package Utiles;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

import GestionPartida.Casilla;
import GestionUsuarios.GestorSistema;

/**
 * @author Equipo 04 Panel utilizado para representar una casilla,, puede ser de
 *         color verde o negro y puede tener una ficha dibujada o no.
 */
public class PanelCasilla extends JPanel {

	private GestorSistema gestor;
	private Casilla casilla;
	private ImageIcon iconoFicha;
	private float alpha;

	private static final Color VERDE = new Color(0.2F, 0.5F, 0.2F, 1.0F);
	private static final Color NEGRO = new Color(0.0F, 0.0F, 0.0F, 1.0F);

	/**
	 * Constructor del panel
	 * 
	 * @param cas
	 *            casilla que es representada
	 * @param esVerde
	 *            true si la casilla es verde
	 */
	public PanelCasilla(Casilla cas, boolean esVerde) {
		gestor = GestorSistema.getInstance();
		casilla = cas;
		casilla.setComponenteVisual(this);

		alpha = 1.0f;
		// Asignar color de fondo de la casilla
		if (esVerde) {
			setBackground(VERDE);
		} else {
			setBackground(NEGRO);
		}

		// Asignar ficha de la casilla
		if (casilla.getFicha() != null) {
			iconoFicha = gestor.crearImagen(casilla.getFicha().getColor(),
					casilla.getFicha().getTipo());
		} else {
			iconoFicha = null;
		}
	}

	public Casilla getCasilla() {
		return casilla;
	}

	public void setIcono(ImageIcon i) {
		iconoFicha = i;
		repaint();
	}

	public float getAlpha() {
		return alpha;
	}

	public void setAlpha(float f) {
		if (f > 1.0f) {
			alpha = 1.0f;
		} else {
			if (f < 0.0f) {
				alpha = 0.0f;
			} else {
				alpha = f;
			}
		}
		repaint();
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		Rectangle espacio = g.getClipBounds();
		Graphics2D g2 = (Graphics2D) g;
		/*
		 * DrawImage para pintar la ficha, para que no haya problemas si cambia
		 * de tamanyo la casilla
		 */
		g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
				alpha));
		if (iconoFicha != null) {
			g2.drawImage(iconoFicha.getImage(), 0, 0, (int) espacio.getWidth(),
					(int) espacio.getHeight(), null);
		}
	}

	public ImageIcon getIcono() {
		return iconoFicha;
	}
}
